package cn.com.zero.job.enums;

/**
 * @author zhoupeng
 * @version 1.0.0
 * @Description 路由策略
 * @createTime 2022-07-14
 */
public enum RouteStrategyEnum {

    /**
     * 第一个，固定选择第一个机器；
     */
    FIRST("FIRST"),
    /**
     * 最后一个，固定选择最后一个机器；
     */
    LAST("LAST"),
    /**
     * 轮询，所有机器都执行一次
     */
    ROUND("ROUND"),
    /**
     * 随机，随机选择在线的机器；
     */
    RANDOM("RANDOM"),
    /**
     * 一致性HASH，每个任务按照Hash算法固定选择某一台机器，且所有任务均匀散列在不同机器上。
     */
    CONSISTENT_HASH("CONSISTENT_HASH"),
    /**
     * 最不经常使用，使用频率最低的机器优先被选举；
     */
    LEAST_FREQUENTLY_USED("LEAST_FREQUENTLY_USED"),
    /**
     * 最近最久未使用，最久未使用的机器优先被选举；
     */
    LEAST_RECENTLY_USED("LEAST_RECENTLY_USED"),
    /**
     * 故障转移，按照顺序依次进行心跳检测，第一个心跳检测成功的机器选定为目标执行器并发起调度；
     */
    FAILOVER("FAILOVER"),
    /**
     * 忙碌转移，按照顺序依次进行空闲检测，第一个空闲检测成功的机器选定为目标执行器并发起调度；
     */
    BUSYOVER("BUSYOVER"),
    /**
     * 分片广播，广播触发对应集群中所有机器执行一次任务，同时系统自动传递分片参数；可根据分片参数开发分片任务；
     */
    SHARDING_BROADCAST("SHARDING_BROADCAST");


    private String title;

    RouteStrategyEnum(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}
